package jsu.ljy.lostandfind.model;

import java.util.Date;

/**
 * 认领信息实体类
 * 
 * <p>表示物品的认领申请信息，包含认领人的身份信息和认领状态。
 * 用于物品认领的申请和处理流程。</p>
 * 
 * <p>认领状态说明：
 * <ul>
 *   <li>PENDING - 待处理</li>
 *   <li>APPROVED - 已通过</li>
 *   <li>REJECTED - 已拒绝</li>
 * </ul>
 * </p>
 * 
 * @author 罗嘉毅
 * @version 1.0
 * @since 2024-03-21
 */
public class ClaimInfo {
    /** 认领ID */
    private Long id;
    
    /** 物品ID */
    private Long itemId;
    
    /** 认领用户ID */
    private Long userId;
    
    /** 真实姓名 */
    private String realName;
    
    /** 学号 */
    private String studentId;
    
    /** 联系电话 */
    private String phone;
    
    /** 认领说明 */
    private String description;
    
    /** 申请时间 */
    private Date createTime;
    
    /** 认领状态（PENDING/APPROVED/REJECTED） */
    private String status;
    
    /** 认领用户信息（非数据库字段） */
    private User user;
    
    /** 认领物品信息��非数据库字段） */
    private Item item;

    /**
     * 默认构造函数
     */
    public ClaimInfo() {
    }

    /**
     * 获取认领ID
     * @return 认领ID
     */
    public Long getId() {
        return id;
    }

    /**
     * 设置认领ID
     * @param id 认领ID
     */
    public void setId(Long id) {
        this.id = id;
    }

    /**
     * 获取物品ID
     * @return 物品ID
     */
    public Long getItemId() {
        return itemId;
    }

    /**
     * 设置物品ID
     * @param itemId 物品ID
     */
    public void setItemId(Long itemId) {
        this.itemId = itemId;
    }

    /**
     * 获取认领用户ID
     * @return 认领用户ID
     */
    public Long getUserId() {
        return userId;
    }

    /**
     * 设置认领用户ID
     * @param userId 认领用户ID
     */
    public void setUserId(Long userId) {
        this.userId = userId;
    }

    /**
     * 获取真实姓名
     * @return 真实姓名
     */
    public String getRealName() {
        return realName;
    }

    /**
     * 设置真实姓名
     * @param realName 真实姓名
     * @throws IllegalArgumentException 当姓名为空时抛出
     */
    public void setRealName(String realName) {
        if (realName == null || realName.trim().isEmpty()) {
            throw new IllegalArgumentException("真实姓名不能为空");
        }
        this.realName = realName;
    }

    /**
     * 获取学号
     * @return 学号
     */
    public String getStudentId() {
        return studentId;
    }

    /**
     * 设置学号
     * @param studentId 学号
     * @throws IllegalArgumentException 当学号为空或格式不正确时抛出
     */
    public void setStudentId(String studentId) {
        if (studentId == null || studentId.trim().isEmpty()) {
            throw new IllegalArgumentException("学号不能为空");
        }
        if (!studentId.matches("\\d{10}")) {
            throw new IllegalArgumentException("学号格式不正确");
        }
        this.studentId = studentId;
    }

    /**
     * 获取联系电话
     * @return 联系电话
     */
    public String getPhone() {
        return phone;
    }

    /**
     * 设置联系电话
     * @param phone 联系电话
     */
    public void setPhone(String phone) {
        this.phone = phone;
    }

    /**
     * 获取认领说明
     * @return 认领说明
     */
    public String getDescription() {
        return description;
    }

    /**
     * 设置认领说明
     * @param description 认领说明
     */
    public void setDescription(String description) {
        this.description = description;
    }

    /**
     * 获取申请时间
     * @return 申请时间
     */
    public Date getCreateTime() {
        return createTime;
    }

    /**
     * 设置申请时间
     * @param createTime 申请时间
     */
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 获取认领状态
     * @return 认领状态
     */
    public String getStatus() {
        return status;
    }

    /**
     * 设置认领状态
     * @param status 认领状态
     */
    public void setStatus(String status) {
        this.status = status;
    }

    /**
     * 获取认领用户信息
     * @return 认领用户信息
     */
    public User getUser() {
        return user;
    }

    /**
     * 设置认领用户信息
     * @param user 认领用户信息
     */
    public void setUser(User user) {
        this.user = user;
    }

    /**
     * 获取认领物品信息
     * @return 认领物品信息
     */
    public Item getItem() {
        return item;
    }

    /**
     * 设置认领物品信息
     * @param item 认领物品信息
     */
    public void setItem(Item item) {
        this.item = item;
    }
} 